/*******************************************************
 * 文件名称:  com.minis.beans.ClassPathXmlApplicationContext
 *
 * 系统名称:
 *
 * 模块名称:
 *
 * 软件版权: 小刘开发
 *
 * 功能说明:
 *
 * 开发人员: rui.liu
 *
 * 开发时间: 2024/8/12 11:10
 *
 * 修改记录:
 *
 *
 *
 * 程序版本     修改日期   修改人员   修改单号
 *
 *******************/
package com.minis.beans;

import com.minis.core.ClassPathXmlResource;
import com.minis.core.Resource;
import com.minis.exception.BeansException;

/**
 * <p>Title: ClassPathXmlApplicationContext</p>
 * <p>Description: 集成者 负责集成 上面的几个角色</p>
 * 实现方式
 * <p>
 * 1. 解析 XML 文件中的内容。
 * 2. 加载解析的内容，构建 BeanDefinition。
 * 3. 读取 BeanDefinition 的配置信息，实例化 Bean，然后把它注入到 BeanFactory 容器中
 * </p>
 * @Author rui.liu
 * @Date 2024/8/12 11:10
 * @Version
 */
public class ClassPathXmlApplicationContext implements BeanFactory{
    BeanFactory beanFactory;


    public ClassPathXmlApplicationContext(String fileName) {
        Resource resource =  new ClassPathXmlResource(fileName);

       BeanFactory beanFactory =  new SimpleBeanFactory();

      XmlBeanDefinitionReader reader =  new XmlBeanDefinitionReader(beanFactory);

      reader.loadBeanDefinitions(resource);
      this.beanFactory = beanFactory;


    }

    //context再对外提供一个getBean，底下就是调用的BeanFactory对应的方法
    @Override
    public Object getBean(String beanName) throws BeansException {
        return this.beanFactory.getBean(beanName);
    }

    @Override
    public void registerBeanDefinition(BeanDefinition beanDefinition) {
        this.beanFactory.registerBeanDefinition(beanDefinition);
    }
}
